/**
 * IMAGE Macro
 */
function IMAGE(用于填充图片的格子, 图片地址) {
	const RET_RES = function (msg) {
		// alert(msg);
		// console.log(msg);
		return msg;
	}
	const ranges = 用于填充图片的格子;
	if (!ranges) return RET_RES("请选择用于填充图片的格子");
	if (!图片地址) return RET_RES("没有设置图片地址"); // 没设路径直接返回
	if (typeof 图片地址 !== 'string') 图片地址 = 图片地址.Text;
	const imagePath = 图片地址;
	const app = Application;
	const RES_SHOW = "IMAGE";
	// 非选择一个格子时返回
	if (ranges.Count != 1) return RET_RES("请选择1个用于填充图片的格子");
	// 获取工作表
	const activeSheet = app.ActiveSheet
	// 获取活动单元格
	const activeCell = app.ActiveCell;
	// 用于插入图片的格子
	const imgCell = ranges;
	const this_addr = app.Caller().Address();
	// 非操作公式格子 直接返回
	if (this_addr != activeCell.Address()) return RET_RES(RES_SHOW);
	const this_key = activeSheet.Name + "-" + this_addr;
	const imgCellText = imgCell.Text;
	if(!imgCellText){
		/* 没有 可以插入图片 */
	} else if(!imgCellText.startsWith("=DISPIMG(")){
		// 有，并且不是图片
		return RET_RES("目标格子需为空才能插入");
	} else if(app[this_key] == imagePath){
		// 同一张图片，不需要重新插入
		return RET_RES(RES_SHOW);
	}
	app[this_key] = imagePath;
	try {
		const rangeEx = imgCell.GetRangeEx();
		rangeEx.InsertCellPicture(imagePath);
	} catch (error) {
		return RET_RES("插入图片失败: " + error.message);
	}
	return RET_RES(RES_SHOW);
}

/**
 * INSERT_IMAGE Macro
 * @example
 * //\\//\\ 在WPS单元格输入如下公式 //\\//\\
 * 
 * // 在当前格子的右侧格子插入图片
 * =INSERT_IMAGE("D:/IMG/test.png", COLUMN(), ROW())
 * // 在当前格子的右侧第二个格子插入图片
 * =INSERT_IMAGE("D:/IMG/test.png", COLUMN() + 1, ROW())
 * ...
 */
function INSERT_IMAGE(图片地址, 横向下标_COLUMN, 竖向下标_ROW, 强制填充) {
	const RET_RES = function (msg) { return msg }
	if (!图片地址) return RET_RES("没有设置图片地址"); // 没设路径直接返回
	if (typeof 图片地址 !== 'string') 图片地址 = 图片地址.Text;
	// 检查行列号是否有效
	if (横向下标_COLUMN < 1 || 竖向下标_ROW < 1) return RET_RES("行列号必须大于0");
	const col = 横向下标_COLUMN + 1;
	const row = 竖向下标_ROW;
	const imagePath = 图片地址;
	const forced_fill = ((强制填充 == null) || (强制填充 == true) || (强制填充 == 1))
	const app = Application;
	const RES_SHOW = "OK";
	// 获取工作表
	const activeSheet = app.ActiveSheet;
	// 根据行列号获取单元格并设置公式
    const imgCell = activeSheet.Cells(row, col);
    const imgCellText = imgCell.Text;
    if(!imgCellText){
		// 没有 可以插入图片
	} else if(imgCellText.startsWith("=DISPIMG(")){
		// 是图片 插入替换图片
	} else if(!forced_fill){
		// 不能强插
		return RET_RES("目标格子内有内容");
	}
	try {
		const rangeEx = imgCell.GetRangeEx();
		rangeEx.InsertCellPicture(imagePath);
	} catch (error) {
		return RET_RES("插入图片失败: " + error.message);
	}
	return RET_RES(RES_SHOW);
}

function 清除数组空值(数组) {
    const res = [];
    // 遍历数组（若为单元格区域，Count 是元素总数；若为普通数组，用 length）
    const len = 数组.Count !== undefined ? 数组.Count : 数组.length;
    
    for (let i = 0; i < len; i++) {
        // 获取当前元素（单元格区域用 Item(i+1)，普通数组用 [i]）
        const item = 数组.Item ? 数组.Item(i + 1) : 数组[i];
        // 获取单元格值（若为单元格对象，取 Value；否则直接用元素）
        const text = item.Value2 !== undefined ? item.Value2 : item;
        
        // 过滤空值（排除 null、undefined、空字符串、纯空格）
        if (text !== null && text !== undefined) {
            const trimmed = String(text).trim();
            if (trimmed !== "") {
                res.push(text); // 保留原始值，若需trim后的值可改为 push(trimmed)
            }
        }
    }
    
    return res;
}

function bindImageToCell() {
	let sheet = Application.ActiveSheet;
	let cell = sheet.Range("B2");

	// 插入图片并调整位置
	let image = sheet.Shapes.AddPicture({
		FileName: "D:\\IMG\\test.png",  // 替换为实际路径
		LinkToFile: false,        // 是否链接到文件
		SaveWithDocument: true,   // 图片随文档保存
		Left: 100,                // 图片左边界位置（单位：磅）
		Top: 100,                 // 图片上边界位置
		Width: 200,              // 宽度
		Height: 150              // 高度
	});
	image.Name = "MyPic2";

	// 将图片锚定到单元格（随单元格移动/缩放）
	image.Placement = 3;  // 3表示“随单元格移动并调整大小”
	image.Top = cell.Top;
	image.Left = cell.Left;
	image.Width = cell.Width;
	image.Height = cell.Height;
}

function simpleHash(str) {
	let hash = 0;
	for (let i = 0; i < str.length; i++) {
		const char = str.charCodeAt(i);
		hash = ((hash << 5) - hash) + char;
		hash |= 0; // 转换为32位整数
	}
	return Math.abs(hash).toString(16); // 转为16进制字符串
}

function outMethods(obj) {
	let methods = [];
	let arrts = [];
	for (let prop in obj) {
		if (typeof obj[prop] === "function") {
			methods.push(prop);
		} else {
			arrts.push(prop);
		}
	}
	console.log("===================================");
	console.log("属性：\n" + arrts.join("\n"));
	console.log("方法：\n" + methods.join("\n"));
	console.log("===================================");
}



/*

必备基础变量
var app = Application.Application,
var acSh = app.ActiveSheet,
var mySh = app.Sheets.Item("@SMFY");
var strA = mySh.Range("A1").Value2;
var appFunction = Application.WorksheetFunction;
var callerAddress = app.Caller().Address(); // 当前公式的地址

// 调用WPS内置的TEXT()函数
var time = new Date();
Console.log(appFunction.Text(time,"yyyymmdd"));
Console.log(appFunction.Text(time,"yyyy年mm月dd日 AAAA"));

// 调用WPS内置的SUM()函数
Console.log(appFunction.Sum(mySh.Range("B1:C1")));
Console.log(appFunction.Sum(mySh.Range("B1","C1")));

Application.Caller().Address()

*/